    org 100h ; 告诉编译器程序加载到100H处
    mov ax,cs ; 通过AX中转, 将CS的值传送给DS和ES
    mov ds,ax
    mov es,ax

; clear screen
    mov ah, 6           ; 功能号
    mov al, 0           ; 滚动的文本行数（0=整个窗口）
    mov bh,0fh      ; 设置插入空行的字符颜色为黑底亮白字
    mov ch, 0           ; CH=行号、CL=列号
    mov cl, 0           ; 窗口左上角的行列号都为0
    mov dh, 24      ; 窗口右下角的行号，文本屏幕25行，行号=0~24
    mov dl, 79      ; 窗口右下角的列号，文本屏幕80列，列号=0~79
    int 10h          ; 显示中断

; 显示字符串1 "MY-OS 1.0"（开始）
    mov ah,13h ; 功能号
    mov al,1 ; 光标放到串尾
    mov bl,0ah ; 亮绿
    mov bh,0 ; 第0页
    mov dh,0ah ; 第10行
    mov dl,23h ; 第35列
    mov bp,str1 ; BP=串地址
    mov cx,9 ; 串长为9个字符
    int 10h ; 调用10H号中断
; 显示字符串1（结束）
; 显示字符串2 "(C) 2017  Chen Xiaofeng"（开始）
    mov ah,13h ; 功能号
    mov al,1 ; 光标放到串尾
    mov bl,0dh ; 品红
    mov bh,0 ; 第0页
    mov dh,0ch ; 第12行
    mov dl,1eh ; 第30列
    mov bp,str2 ; BP=串地址
    mov cx,23 ; 串长为19个字符
    int 10h ; 调用10H号中断
; 显示字符串2（结束）
; 显示字符串3 "Please Key in characters (Esc to quit):"
; 及响铃、换行、回车（开始）
    mov ah,13h ; 功能号
    mov al,1 ; 光标放到串尾
    mov bl,0fh ; 黑底白字
    mov bh,0 ; 第0页
    mov dh,0fh ; 第15行
    mov dl,0 ; 第0列
    mov bp,str3 ; BP=串地址
    mov cx,44 ; 串长为44个字符（串 + 响铃 换行 回车）
    int 10h ; 调用10H号中断
; 显示字符串3（结束）
Keyin: ; 读按键
    mov ah,0 ; 功能号
    int 16h ; 调用16H号中断
; 对ESC键：退出
    cmp al,1bh ; 比较AL中的键入字符与ESC字符（ASCII码为1BH）
    je goout; 相等跳转到“退出”标号处
showch: ; 显示键入字符
    mov ah,0eh ; 功能号
    mov bl,0 ; 对文本方式置0
    int 10h ; 调用10H号中断
; 对回车符（0DH）增加一个换行符（0AH）的显示
    cmp al,0dh ; 比较AL中的键入字符与回车符（ASCII码为0DH）
    mov al,0ah ; 设置AL为换行符（ASCII码为0AH）
    je showch ; 相等跳转到前面的“显示键入字符”标号处
; 循环读显按键
    jmp Keyin ; 跳转到前面的“读按键”标号处
goout: ; 退出
    mov ax,4c00h    ; AH=4Ch（功能号，终止进程）、AL=0（返回代码）
    int 21h         ; DOS软中断
    ;retf ; 返回（原来的远程返回不符合COM 的要求，运行时可能会报错）
str1: ; 字符串1
    db "MY-OS 1.0"
str2: ; 字符串2
    db "(C) 2017  Chen Xiaofeng"
str3: ; 字符串3
    db "Please Key in characters (Esc to quit):"
    db 7,7,0ah,0ah,0dh ; 响铃 换行 回车
